package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 通过反射对象获取相关信息
 * 比如通过Method对象获取对应的方法信息
 */
public class ReflectDemo6 {
    public static void main(String[] args) throws Exception{
        // 获取类对象
        Class cls = Class.forName("reflect.Person");
        Method method = cls.getMethod("say", String.class,int.class);
        System.out.println(method);

        // 获取方法名
        System.out.println(method.getName());
        // 获取方法返回值类型
        System.out.println(method.getReturnType());
        // 获取参数个数
        System.out.println("参数的个数：" + method.getParameterCount());

        // 获取方法参数类型
        Class[] paramTypes = method.getParameterTypes();
        for (Class paramType : paramTypes) {
            System.out.println(paramType);
        }
        // 获取方法修饰符
        // 访问修饰符：public、private、protected、default
        // 用一个整数表示：public = 1、private = 2、protected = 4、default = 0
        int modifiers = method.getModifiers();
        switch (modifiers){
            case Modifier.PUBLIC:
                System.out.println("public");
                break;
            case Modifier.PRIVATE:
                System.out.println("private");
                break;
            case Modifier.PROTECTED:
                System.out.println("protected");
                break;
            default:
                System.out.println("default");
        }
    }
}
